//import com.lowagie.text.DocumentException;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.collections4.CollectionUtils;
//import org.apache.poi.xwpf.usermodel.*;
//import org.aspectj.util.FileUtil;
//import org.jsoup.Jsoup;
//import org.jsoup.nodes.Document;
//import org.jsoup.nodes.Element;
//import org.jsoup.nodes.Node;
//import org.jsoup.select.Elements;
//import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
//import org.springframework.util.StringUtils;
//import org.xhtmlrenderer.pdf.ITextRenderer;
//
//import java.io.*;
//import java.math.BigInteger;
//import java.util.List;
//import java.util.Objects;
//
//@Slf4j
//public class Html2WordTest1 {
//
//    /**
//     * 每厘米567缇
//     */
//    private static double teePerCM = 567;
//    /**
//     * 每厘米28.35磅
//     */
//    private static double poundPerCm = 28.35;
//    private static String rgb_black = "000000";
//
//    /**
//     * 根据磅，获取缇
//     *
//     * @return
//     */
//    private static BigInteger getTwipFromPound(double pound) {
//        Double d = pound * teePerCM / poundPerCm;
//        return BigInteger.valueOf(d.longValue());
//    }
//
//    /**
//     * 根据厘米，获取缇
//     *
//     * @param cm
//     * @return
//     */
//    private static BigInteger getTwipFromCM(double cm) {
//        Double d = cm * teePerCM;
//        return BigInteger.valueOf(d.longValue());
//    }
//
//    public static void main(String[] args) throws Exception {
////        buildTable1();
////        buildTable2();
//        String outPath = "D:\\work\\project\\jar\\wordtopdf-server\\createWordBytemplate\\src\\test\\java\\simple.png";
//        String htmlTemplateStr = "D:\\work\\project\\jar\\wordtopdf-server\\createWordBytemplate\\src\\test\\java\\simple.html";
//        String htmlStr = FileUtil.readAsString(new File(htmlTemplateStr));
//        html2img(htmlStr, outPath);
//        log.info("通过html构建docx文件成功！");
//
//    }
//
///*    private static void html2img3(String htmlTemplateStr, String outPath) throws IOException {
//        String coverPath = null;
//        try {
//            HtmlImageGenerator imageGenerator = new HtmlImageGenerator();
//            imageGenerator.loadHtml(htmlTemplateStr);//也可以根据html url引用 loadUrl的方式加载
//            Thread.sleep(1000); //有时会有加载图片延迟，因此这里设置下延时
//            BufferedImage cover = imageGenerator.getBufferedImage();//获取图片
//            cover = ImageUtils.getCoverImage(cover);//将图片转成综略图
//            String coverName = UUIDGenerator.generate().toString() + ".png";
//            MultipartFile mpFile = FileUtils.imageToMpFile(cover, coverName);
//            coverPath = sysBaseAPI.upload(mpFile, "cover", uploadType);//上传文件到服务器
//
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }*/
//
//    /*private static void html2img2(String htmlTemplateStr, String outPath) throws IOException {
//        HtmlParser htmlParser = new HtmlParserImpl();
//        htmlParser.loadHtml(htmlTemplateStr);
//        // html 是我的html代码
//        ImageRenderer imageRenderer = new ImageRendererImpl(htmlParser);
//        imageRenderer.saveImage(outPath);
//    }*/
//
//    private static void html2img(String htmlContent, String outPath) throws DocumentException {
//        // 生成PDF
//        ByteArrayOutputStream os = new ByteArrayOutputStream();
//        ITextRenderer renderer = new ITextRenderer();
//        renderer.setDocumentFromString(htmlContent);
//        renderer.layout();
//        renderer.createPDF(os);
//        // 保存为图片
//        try (FileOutputStream fos = new FileOutputStream(outPath)) {
//            fos.write(os.toByteArray());
//        } catch (FileNotFoundException e) {
//            throw new RuntimeException(e);
//        } catch (IOException e) {
//            throw new RuntimeException(e);
//        }
//
//        System.out.println("HTML已成功转换为PDF格式.");
//    }
//
//    public static void buildTable2() throws Exception {
//        String htmlPath = "D:\\work\\project\\jar\\wordtopdf-server\\createWordBytemplate\\src\\test\\java\\simple.html";
//        String templatePath = "D:\\work\\project\\jar\\wordtopdf-server\\createWordBytemplate\\src\\test\\java\\template.docx";
//        String targetPath = "D:\\work\\project\\jar\\wordtopdf-server\\createWordBytemplate\\src\\test\\java\\simple.docx";
//        Document htmlDocument = Jsoup.parse(new File(htmlPath));
//        List<Node> nodeList = htmlDocument.body().childNodes();
//        XWPFDocument document = new XWPFDocument(new FileInputStream(new File(templatePath)));
//        for (Node node : nodeList) {
////            获取出table标签
//            if (node.nodeName().equalsIgnoreCase("table")) {
//                XWPFParagraph paragraph = document.getLastParagraph();
//                parseTableToWord(document, node, paragraph);
//            }
//        }
//        FileOutputStream fileOutputStream = new FileOutputStream(new File(targetPath));
//        document.write(fileOutputStream);
//        fileOutputStream.close();
//    }
//
//    private static void parseTableToWord(XWPFDocument doc, Node node, XWPFParagraph paragraph) throws Exception {
//        //简化表格html
//        String string = node.toString();
//        org.jsoup.nodes.Document tableDoc = Jsoup.parse(string);
//        Elements trList = tableDoc.getElementsByTag("tr");
//        //创建表格
//        XWPFTable xwpfTable = doc.insertNewTbl(paragraph.getCTP().newCursor());
//        if (null == xwpfTable) {
//            return;
//        }
//        //设置样式
//        CTTblPr ctTblPr = xwpfTable.getCTTbl().getTblPr();
//        if (ctTblPr == null) {
//            ctTblPr = xwpfTable.getCTTbl().addNewTblPr();
//        }
//        CTJc jc = ctTblPr.getJc();
//        if (jc == null) {
//            jc = ctTblPr.addNewJc();
//        }
//        //表格位置居中显示
//        jc.setVal(STJc.CENTER);
//        ctTblPr.setJc(jc);
//        //设置表格宽度
//        ctTblPr.getTblW().setType(STTblWidth.PCT);
////        ctTblPr.getTblW().setType(STTblWidth.DXA);
//        //设置表格宽度10cm转换成缇  1cm=567缇
//        ctTblPr.getTblW().setW(getTwipFromCM(10));
//        //设置单元格边框
////        CTTcBorders borders = CTTcBorders.Factory.newInstance();
////        CTBorder border = CTBorder.Factory.newInstance();
////        border.setVal(STBorder.SINGLE);
////        加粗
////        border.setVal(STBorder.THICK);
////       虚线边框
////        border.setVal(STBorder.DOTTED);
////        三层边框
////        border.setVal(STBorder.TRIPLE);
////        波浪
////        border.setVal(STBorder.WAVE);
////        border.setColor(rgb_black);
////        border.setSz(BigInteger.ONE);
////        border.setSpace(BigInteger.ZERO);
////        borders.setLeft(border);
////        borders.setBottom(border);
////        borders.setRight(border);
////        borders.setTop(border);
////        CTTcPr ctTcPr = xwpfTable.getRow(0).getCell(0).getCTTc().getTcPr();
////        if (ctTcPr == null) ctTcPr = xwpfTable.getRow(0).getCell(0).getCTTc().addNewTcPr();
////        ctTcPr.setTcBorders(borders);
//
//        //写入表格行和列内容
//        for (int row = 0; row < trList.size(); row++) {
//            XWPFTableRow tableRow = xwpfTable.getRow(row);
//            if (null == tableRow) {
//                tableRow = xwpfTable.createRow();
//            }
//            Element trElement = trList.get(row);
////            先后获取表头<th></th>
//            Elements tds = trElement.getElementsByTag("th");
//            if (CollectionUtils.isEmpty(tds)) {
////                 如果th为空说明该行是表内容 <td></td>
//                tds = trElement.getElementsByTag("td");
//            }
//            double widthTotal = 0.0;
////            操作列
//            for (int col = 0; col < tds.size(); col++) {
////                获取当前列对象
//                XWPFTableCell tableCell = tableRow.getCell(col);
//                if (null == tableCell) {
//                    tableCell = tableRow.createCell();
//                }
//                //设置单元格边框样式
//                CTTcPr tcPr = tableCell.getCTTc().isSetTcPr() ? tableCell.getCTTc().getTcPr() : tableCell.getCTTc().addNewTcPr();
//                CTTcBorders ctTcBorders = tcPr.addNewTcBorders();
//                ctTcBorders.addNewLeft().setVal(STBorder.SINGLE);
//                ctTcBorders.addNewRight().setVal(STBorder.SINGLE);
//                ctTcBorders.addNewTop().setVal(STBorder.SINGLE);
//                ctTcBorders.addNewBottom().setVal(STBorder.SINGLE);
//
//                Element colElement = tds.get(col);
//                List<Node> nodes = colElement.childNodes();
//                for (Node tdNode : nodes) {
//                    if ("#text".equalsIgnoreCase(tdNode.nodeName())) {
//                        //将每一个的内容当成一个段落进行编辑之后再填充到table中
//                        parseHtmlToWordTable(colElement, doc, tableCell.getParagraphs().get(0));
//
//                    }
//                }
//            }
//        }
//    }
//
//    static void parseHtmlToWordTable(Node node, XWPFDocument doc, XWPFParagraph xwpfParagraph) {
//        List<Node> nodes = node.childNodes();
//        if (CollectionUtils.isNotEmpty(nodes)) {
//            for (Node childNode : nodes) {
//                parseHtmlToWordTable(childNode, doc, xwpfParagraph);
//            }
//        }
//        //处理table标签
//        if ("table".equalsIgnoreCase(node.nodeName())) {
//            return;
//        }
//
//        if (CollectionUtils.isNotEmpty(node.childNodes())) {
//            return;
//        }
//        String nodeValue = node.toString();
//
//        Node parent = node.parent();
//        boolean boldFlag = false;
//        String color = "";
//        boolean subFlag = false;
//        boolean supFlag = false;
//        boolean ulFlag = false;
//
//        if (null != parent) {
//            String parentNodeName = parent.nodeName();
//            if (parentNodeName.equalsIgnoreCase("strong") || parentNodeName.equalsIgnoreCase("b")) {
//                boldFlag = true;
//            } else if (parentNodeName.equalsIgnoreCase("font")) {
//                if (Objects.requireNonNull(parent.parent()).nodeName().equalsIgnoreCase("strong")
//                        || Objects.requireNonNull(parent.parent()).nodeName().equalsIgnoreCase("b")) {
//                    boldFlag = true;
//                }
//                String color1 = parent.attr("color");
//                if (!StringUtils.isEmpty(color1)) {
//                    color = color1.substring(1);
//                }
//                Node parented = parent.parent();
//                if (null != parented) {
//                    if (parented.nodeName().equalsIgnoreCase("li")) {
//                        if (Objects.requireNonNull(parented.parent()).nodeName().equalsIgnoreCase("ul")) {
//                            ulFlag = true;
//                        }
//                    }
//                }
//            } else if (parentNodeName.equalsIgnoreCase("sub")) {
//                subFlag = true;
//            } else if (parentNodeName.equalsIgnoreCase("sup")) {
//                supFlag = true;
//            } else if (parentNodeName.equalsIgnoreCase("li")) {
//                if (Objects.requireNonNull(parent.parent()).nodeName().equalsIgnoreCase("ul")) {
//                    ulFlag = true;
//                }
//            }
//        }
//
//        if ("#text".equalsIgnoreCase(node.nodeName()) && !nodeValue.contains("<")) {
//            XWPFRun run = xwpfParagraph.createRun();
//            run.setFontFamily("Times New Roman");
//            run.setFontSize(10);
//            if (boldFlag) {
//                run.setBold(true);
//            }
//            if (StringUtils.isEmpty(color)) {
//                run.setColor(color);
//            }
//            if (supFlag) {
//                run.setSubscript(VerticalAlign.SUPERSCRIPT);
//            }
//            if (subFlag) {
//                run.setSubscript(VerticalAlign.SUBSCRIPT);
//            }
//            if (ulFlag && StringUtils.isEmpty(nodeValue.trim())) {
//                XWPFParagraph paragraph = doc.createParagraph();
//                paragraph.setIndentFromLeft(0);
//                paragraph.setFirstLineIndent(0);
////                paragraph.setIndentationLeftChars(125);
//                XWPFRun run1 = paragraph.createRun();
//                run1.setFontFamily("Times New Roman");
//                run1.setFontSize(8);
//                run1.setText("●");
//                run1.addTab();
//                XWPFRun run2 = paragraph.createRun();
//                run2.setText(nodeValue.trim());
//                run2.setFontFamily("Times New Roman");
//                run2.setFontSize(10);
//            }
//            if (StringUtils.isEmpty(nodeValue) && !ulFlag) {
//                run.setText(nodeValue.trim());
//            }
//
//        }
//
////        boolean enabledBreak = ReUtil.isMatch("(|h[12345]|li|img|br)", node.nodeName().toLowerCase());
//        boolean enabledBreak = true;
//        if (enabledBreak) {
//            XWPFRun run = xwpfParagraph.createRun();
//            run.addCarriageReturn();
//        }
//    }
//
//
//    /**
//     *
//     */
//  /*  public static void buildTable1() throws IOException {
//        String htmlPath = "D:\\work\\project\\jar\\wordtopdf-server\\createWordBytemplate\\src\\test\\java\\simple.html";
//        String templatePath = "D:\\work\\project\\jar\\wordtopdf-server\\createWordBytemplate\\src\\main\\resources\\template.docx";
//        String targetPath = "D:\\work\\project\\jar\\wordtopdf-server\\createWordBytemplate\\src\\test\\java\\simple.docx";
//        Document htmlDocument = Jsoup.parse(new File(htmlPath));
//        List<Node> nodeList = htmlDocument.body().childNodes();
//        List<Node> table = nodeList.stream().filter(o -> o.nodeName().equalsIgnoreCase("table")).collect(Collectors.toList());
//        XWPFTemplate template = XWPFTemplate.compile(templatePath);
//        for (Node node : table) {
//            Map map = new HashMap<>();
//            Elements rows = ((Element) node).getElementsByTag("tr");
//            if (CollectionUtils.isEmpty(rows)) {
//                continue;
//            }
//            RowRenderData[] rowArr = new RowRenderData[rows.size()];
//            for (int row = 0; row < rows.size(); row++) {
//                Elements cols = rows.get(row).getElementsByTag("th");
//                if (CollectionUtils.isEmpty(cols)) {
//                    cols = rows.get(row).getElementsByTag("td");
//                }
//                String[] colsAtrr = new String[cols.size()];
//                for (int col = 0; col < cols.size(); col++) {
//                    colsAtrr[col] = cols.get(col).text();
//                }
//                rowArr[row] = Rows.of(colsAtrr).create();
//            }
//            TableRenderData tableRenderData = Tables.create(rowArr);
//            map.put("table", tableRenderData);
//            template.render(map);
//        }
//        template.writeAndClose(Files.newOutputStream(Paths.get(targetPath)));
//    }*/
//
//
//}
